package stu.stu;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * 学生管理系统主类
 * 功能：实现学生信息的增删改查操作
 */
public class StudentManager {
    public static void main(String[] args) {
        // 创建存储学生对象的集合
        ArrayList<Student> array = new ArrayList<>();

        // 主界面循环
        while (true) {
            // 打印功能菜单
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1、添加学生");
            System.out.println("2、删除学生");
            System.out.println("3、修改学生");
            System.out.println("4、查看所有学生");
            System.out.println("5、退出");
            System.out.println("请输入你的选择：");
            // 获取用户输入
            Scanner sc = new Scanner(System.in);
            String choice = sc.nextLine();

            // 根据选择执行操作
            switch (choice) {
                case "1":
                    addStudent(array); // 添加学生
                    break;
                case "2":
                    deleteStudent(array); // 删除学生
                    break;
                case "3":
                    updateStudent(array); // 修改学生
                    break;
                case "4":
                    finalAllStudent(array); // 查看所有学生
                    break;
                case "5":
                    System.out.println("已退出，谢谢使用");
                    System.exit(0); // 退出程序
                default:
                    System.out.println("输入无效，请重新选择！");
            }
        }
    }

    /**
     * 添加学生信息
     * @param array 学生集合
     */
    public static void addStudent(ArrayList<Student> array) {
        Scanner sc = new Scanner(System.in);
        String sid;
        // 检查学号唯一性
        while (true) {
            System.out.println("请输入学生的学号：");
            sid = sc.nextLine();
            if (isUsed(array, sid)) {
                System.out.println("学号已被占用，请重新输入：");
            } else {
                break;
            }
        }

        // 输入其他信息
        System.out.println("请输入学生的姓名：");
        String name = sc.nextLine();
        System.out.println("请输入学生的年龄：");
        String age = sc.nextLine();
        System.out.println("请输入学生的居住地：");
        String address = sc.nextLine();

        // 创建学生对象并添加到集合
        Student s = new Student();
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);
        array.add(s);
        System.out.println("添加学生成功");
    }

    /**
     * 检查学号是否重复
     * @param array 学生集合
     * @param sid 待检查的学号
     * @return 是否被占用
     */
    public static boolean isUsed(ArrayList<Student> array, String sid) {
        for (Student s : array) {
            if (s.getSid().equals(sid)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 查看所有学生信息
     * @param array 学生集合
     */
    public static void finalAllStudent(ArrayList<Student> array) {
        if (array.isEmpty()) {
            System.out.println("无信息，请先添加信息再查询");
            return;
        }

        // 打印表头和数据
        System.out.println("学号\t\t\t姓名\t\t\t年龄\t\t居住地");
        for (Student s : array) {
            System.out.println(s.getSid() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "岁\t" + s.getAddress());
        }
    }

    /**
     * 删除学生信息
     * @param array 学生集合
     */
    public static void deleteStudent(ArrayList<Student> array) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生的学号：");
        String sid = sc.nextLine();

        // 先检查学号是否存在
        boolean isExist = false;
        for (int i = 0; i < array.size(); i++) {
            if (array.get(i).getSid().equals(sid)) {
                isExist = true;
                break;
            }
        }

        // 根据检查结果执行操作
        if (isExist) {
            for (int i = 0; i < array.size(); i++) {
                if (array.get(i).getSid().equals(sid)) {
                    array.remove(i);
                    System.out.println("删除成功");
                    return;
                }
            }
        } else {
            System.out.println("未找到该学号的学生");
        }
    }
    /**
     * 修改学生信息
     * @param array 学生集合
     */
    public static void updateStudent(ArrayList<Student> array) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改的学生的学号：");
        String sid = sc.nextLine();

        // 先检查学号是否存在
        boolean isExist = false;
        int targetIndex = -1;
        for (int i = 0; i < array.size(); i++) {
            if (array.get(i).getSid().equals(sid)) {
                isExist = true;
                targetIndex = i;  // 记录目标学生的索引
                break;
            }
        }

        if (!isExist) {
            System.out.println("未找到该学号的学生");
            return;  // 直接退出方法
        }

        // 学号存在时，才允许输入新信息
        System.out.println("请输入学生的新姓名：");
        String name = sc.nextLine();
        System.out.println("请输入学生的新年龄：");
        String age = sc.nextLine();
        System.out.println("请输入学生的新居住地：");
        String address = sc.nextLine();

        // 直接修改原对象属性（推荐方式）
        Student targetStudent = array.get(targetIndex);
        targetStudent.setName(name);
        targetStudent.setAge(age);
        targetStudent.setAddress(address);

        System.out.println("修改成功");
    }
}